import sys,os
sys.path.append("/home/cyq610664915/deeplearning/data")
from dataset.mnist import load_mnist
import numpy as np
from PIL import Image
import pickle
(x_train,t_train),(x_test,t_test)=load_mnist(flatten=True,normalize=False)
print(x_train.shape)
print(t_train.shape)
print(x_test.shape)
print(t_test.shape)
def img_show(img):
    pil_img=Image.fromarray(np.uint8(img))
    pil_img.show()
img=x_train[0]    
label=t_train[0]
print(label)

print(img.shape)
img=img.reshape(28,28)
print(img.shape)
img_show(img)

def get_data():
    (x_train,t_train),(x_test,t_test)=\
    load_mnist(normalize=True,flatten=True,one_hot_label=False)
    return x_test,t_test
def init_network():
    with open("sample_weight.pkl","rb")as f:
        network=pickle.loat(f)
        return network

def sigmoid(x):
    return 1/(1+np.exp(-x))

def softmax(x):
    c=np.maximum(x)
    return np.exp(x-c)/np.sum(np.exp(x-c))

def init_network():
    network={}
    network["W1"]=np.array([[0.1,0.3,0.5],[0.2,0.4,0.6]])
    network["b1"]=np.array([0.1,0.2,0.3])
    network["W2"]=np.array([[0.1,0.4],[0.2,0.5],[0.3,0.6]])
    network["b2"]=np.array([0.1,0.2])
    network["W3"]=np.array([[0.1,0.3],[0.2,0.4]])
    network["b3"]=np.array([0.1,0.2])
    return network

def predict(network,x):
    W1,W2,W3=network["W1"],network["W2"],network["W3"]
    b1,b2,b3=network["b1"],network["b2"],network["b3"]
    a1=np.dot(x,W1)+b1 
    z1=sigmoid(a1) 
    a2=np.dot(z1,W2)+b2  
    z2=sigmoid(a2) 
    a3=np.dot(z2,W3)+b3
    y=softmax(a3)  
    return y
x,t=get_data()
network=init_network()
accuracy_cnt=0
for i in range(len(x)):
    y=predict(network,x[i])
    p=np.argmax(y)
    if p==t[i]:
        accuracy_cnt+=1
print("Accuracy:"+str(float(accuracy_cnt)/len(x)))       